#ifndef COMMANDDEFINE_H
#define COMMANDDEFINE_H

#include <QByteArray>
#include <QString>
#include <QDebug>

namespace CommandDefine {

    // ========== 灯光控制指令 ==========
    extern const QByteArray CK_APPENDIX_LASER_ON;           // 指示激光开
    extern const QByteArray CK_APPENDIX_LASER_OFF;          // 指示激光关
    extern const QByteArray CK_APPENDIX_RED_ON;             // 红光开
    extern const QByteArray CK_APPENDIX_RED_OFF;            // 红光关
    extern const QByteArray CK_APPENDIX_GREEN_ON;           // 绿光开
    extern const QByteArray CK_APPENDIX_GREEN_OFF;          // 绿光关
    extern const QByteArray CK_APPENDIX_BLUE_ON;            // 蓝光开
    extern const QByteArray CK_APPENDIX_BLUE_OFF;           // 蓝光关


    // ========== 衰减器控制指令 ==========
    extern const QByteArray CK_VOA_ON;                      // 衰减器开
    extern const QByteArray CK_VOA_OFF;                     // 衰减器关
    extern const QByteArray CK_VOA_SET_VOLTAGE_TEMPLATE;    // 衰减器电压（XXXX：代表电压值，范围0000~5000）
    // extern const QByteArray CKR_VOA_REPLY;


    // =========== 光纤炉温度指令 ==========
    // 上位机发送
    extern const QByteArray CK_FURNACE_QUERY;
    // 下位机返回
    extern const QByteArray CKR_FURNACE_REPLY;              //（XX XX：温度A，YY YY：温度B）


    // ========== 温、湿度、气压传感器 (ID:5) ==========
    // 上位机发送
    extern const QByteArray CK_ENV_QUERY;
    // 下位机返回
    extern const QByteArray CKR_ENV_REPLY;                  //（XXXX：温度，YYYY：湿度，ZZZZ：气压）


    // ========== 光开关指令 (OS) ==========
    // 上位机发送
    extern const QByteArray CK_OPTICAL_SWITCH_TEMPLATE;     //（X：取值0、1、2、3、4，代表开启哪个通道）
    // 下位机返回
    extern const QByteArray CKR_OPTICAL_SWITCH_OK;          //（X：取值0、1、2、3、4）


    // ========== 调焦指令 (LMT) ==========
    /*
        限位开关顺序
        D：上
        C
        B
        A：下
    */
    // 上位机发送
    extern const QByteArray CK_FOCUS_AB;
    extern const QByteArray CK_FOCUS_AC;
    extern const QByteArray CK_FOCUS_AD;
    extern const QByteArray CK_FOCUS_BC;
    extern const QByteArray CK_FOCUS_BD;
    extern const QByteArray CK_FOCUS_CD;


    // ========== 回零/位置控制 (FUS ID:1) ==========
    // 上位机发送
    extern const QByteArray CK_FUS_HOME;                    // 回零启动
    extern const QByteArray CK_FUS_POS;                     // 位置启动
    extern const QByteArray CK_FUS_STOP;                    // 停止
    extern const QByteArray CK_FUS_SET_SPEED_POS_TEMPLATE;  // x:速度 y:位置
    // 返回
    extern const QByteArray CKR_FUS_READY;                  // 运动完成
    extern const QByteArray CKR_FUS_SET_OK;                 // 设定完成
    extern const QByteArray CKR_FUS_WARN;                   // 到达上限位


    // ========== 风扇控制器 (FAN ID:4) ==========
    extern const QByteArray CK_FAN_SET_TEMP_TEMPLATE;       // 温度设置（XXX:启动温度0-255  YYY:全速温度 0-255）
    extern const QByteArray CKR_FAN_SET_OK;                 // 返回
    extern const QByteArray CK_FAN_READ_TEMP;               // 读取当前温度
    extern const QByteArray CKR_FAN_REPLY_TEMP;             // 返回（XXX:温度值 0-255）


    // ========== 激光器温度控制 (LAS ID:3) ==========
    extern const QByteArray CK_LAS_SET_TEMP_TEMPLATE;       // X:温度 -40000000~100000000   2500000代表就是25.00000℃
    extern const QByteArray CK_LAS_QUERY_TEMP;
    extern const QByteArray CKR_LAS_SET_OK;
    extern const QByteArray CKR_LAS_REPLY_TEMP;


    // ========== 光纤炉温度控制(大) (FTC ID:2) ==========
    extern const QByteArray CK_FTC_SET_TEMP_TEMPLATE;       // K:通道1或2   X:通道K温度-40000000~100000000  2500000代表就是25.00000℃
    extern const QByteArray CKR_FTC_SET_OK;                 // 返回
    extern const QByteArray CKR_FTC_SET_ERR;                // 返回
    extern const QByteArray CK_FTC_QUERY_TEMP;              // 通道K（1 2）温度查询
    extern const QByteArray CKR_FTC_REPLY_TEMP;             // 返回
    extern const QByteArray CKR_FTC_REPLY_ERR;              // 返回


    // ========== 函数（指令构建） ==========
    QByteArray buildVOASetVoltage(int voltage);                     // VOA: 设置 衰减器电压 (0~5000)
    QByteArray buildFANSetTemp(int startTemp, int fullTemp);        // FAN: 设置 风扇控制器 启动温度(0-255)全速温度(0-255)
    QByteArray buildFUSSetSpeedPos(double speed, double pos);       // FUS: 设置 调焦指令 速度和位置
    QByteArray buildLASSetTemp(double temp);                        // LAS: 设置 激光器温度 (-400.0 ~ 1000.0 ℃)
    QByteArray buildFTCSetTemp(int channel, double temp);           // FTC: 设置 光纤炉温度控制(大) (-400.0 ~ 1000.0 ℃)
    QByteArray buildFTCQueryTemp(int channel);                      // FTC: 查询 光纤炉温度控制(大)
    QByteArray buildOpticalSwitch(int channel);                     // OPTICAL_SWITCH: 光开关指令 选择通道 (0~4)

}

#endif // COMMANDDEFINE_H
